package com.rhf.core.db.factories;

import com.rhf.core.commons.logging.AppLog;
import com.rhf.core.commons.logging.AppLogManager;
import com.rhf.core.db.interfaces.Categorie;
import com.rhf.core.db.interfaces.Classement;
import com.rhf.core.db.interfaces.Club;
import com.rhf.core.db.interfaces.Competition;
import com.rhf.core.db.interfaces.Equipe;
import com.rhf.core.db.interfaces.Evenement;
import com.rhf.core.db.interfaces.Gestionnaire;
import com.rhf.core.db.interfaces.Match;
import com.rhf.core.db.interfaces.ParticiperCompetition;
import com.rhf.core.db.interfaces.Saison;
import com.rhf.core.db.interfaces.Utilisateur;

/**
 * Retourne les instances des objets enregistrés
 * 
 * @author fabiensaulnier
 */
public class Factory {

	/**
	 * Récupère une instance d'une catégorie
	 * 
	 * @return une instance d'une catégorie
	 * @throws Exception
	 */
	public static Categorie getCategorieDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : categorie
		Object obj = BaseFactory.getInstance(RegistryInstance.CATEGORIE);
		if (obj != null && obj instanceof Categorie) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.CATEGORIE + "] OK ");
			return (Categorie) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.CATEGORIE + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un classement
	 * 
	 * @return une instance d'une classement
	 * @throws Exception
	 */
	public static Classement getClassementDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : classement
		Object obj = BaseFactory.getInstance(RegistryInstance.CLASSEMENT);
		if (obj != null && obj instanceof Classement) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.CLASSEMENT + "] OK ");
			return (Classement) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.CLASSEMENT + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un club
	 * 
	 * @return une instance d'un club
	 * @throws Exception
	 */
	public static Club getClubDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : club
		Object obj = BaseFactory.getInstance(RegistryInstance.CLUB);
		if (obj != null && obj instanceof Club) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.CLUB + "] OK ");
			return (Club) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.CLUB + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'une compétition
	 * 
	 * @return une instance d'une compétition
	 * @throws Exception
	 */
	public static Competition getCompetitonDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : competition
		Object obj = BaseFactory.getInstance(RegistryInstance.COMPETITION);
		if (obj != null && obj instanceof Competition) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.COMPETITION + "] OK ");
			return (Competition) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.COMPETITION + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'une équipe
	 * 
	 * @return une instance d'une équipe
	 * @throws Exception
	 */
	public static Equipe getEquipeDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : equipe
		Object obj = BaseFactory.getInstance(RegistryInstance.EQUIPE);
		if (obj != null && obj instanceof Equipe) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.EQUIPE + "] OK ");
			return (Equipe) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.EQUIPE + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un événement
	 * 
	 * @return une instance d'une événement
	 * @throws Exception
	 */
	public static Evenement getEvenementDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : evenement
		Object obj = BaseFactory.getInstance(RegistryInstance.EVENEMENT);
		if (obj != null && obj instanceof Evenement) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.EVENEMENT + "] OK ");
			return (Evenement) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.EVENEMENT + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un gestionnaire
	 * 
	 * @return une instance d'un gestionnaire
	 * @throws Exception
	 */
	public static Gestionnaire getGestionnaireDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : gestionnaire
		Object obj = BaseFactory.getInstance(RegistryInstance.GESTIONNAIRE);
		if (obj != null && obj instanceof Gestionnaire) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.GESTIONNAIRE + "] OK ");
			return (Gestionnaire) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.GESTIONNAIRE + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un match
	 * 
	 * @return une instance d'un match
	 * @throws Exception
	 */
	public static Match getMatchDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : match
		Object obj = BaseFactory.getInstance(RegistryInstance.MATCH);
		if (obj != null && obj instanceof Match) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.MATCH + "] OK ");
			return (Match) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.MATCH + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance de participation à une compétition
	 * 
	 * @return une instance de participation à une compétition
	 * @throws Exception
	 */
	public static ParticiperCompetition getParticiperCompetitionDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : participer competition
		Object obj = BaseFactory.getInstance(RegistryInstance.PARTICIPER_COMPETITION);
		if (obj != null && obj instanceof ParticiperCompetition) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.PARTICIPER_COMPETITION + "] OK ");
			return (ParticiperCompetition) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.PARTICIPER_COMPETITION + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'une saison
	 * 
	 * @return une instance d'une saison
	 * @throws Exception
	 */
	public static Saison getSaisonDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : saison
		Object obj = BaseFactory.getInstance(RegistryInstance.SAISON);
		if (obj != null && obj instanceof Saison) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.SAISON + "] OK ");
			return (Saison) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.SAISON + "] KO ");
		return null;
	}

	/**
	 * Récupère une instance d'un utilisateur
	 * 
	 * @return une instance d'une utilisateur
	 * @throws Exception
	 */
	public static Utilisateur getUtilisateurDao() throws Exception {

		// Log
		AppLog appLog = AppLogManager.getDaoLogger();

		// Récupération d'une instance : saison
		Object obj = BaseFactory.getInstance(RegistryInstance.UTILISATEUR);
		if (obj != null && obj instanceof Utilisateur) {
			appLog.debug("Chargement de l'objet [" + RegistryInstance.UTILISATEUR + "] OK ");
			return (Utilisateur) obj;
		}
		appLog.debug("Chargement de l'objet [" + RegistryInstance.UTILISATEUR + "] KO ");
		return null;
	}

}
